import re

import pandas as pd
import glob


def merge_and_deduplicate(file_paths, output_file):
    """合并CSV文件并根据Title列去重，保存到新的CSV文件中。"""
    all_data = pd.concat([pd.read_csv(file) for file in file_paths])
    unique_data = all_data.drop_duplicates(subset=['Title'])
    unique_data.to_csv(output_file, index=False)
    return output_file


def extract_and_sort_authors(input_file, output_file):
    """从CSV文件中提取所有作者，去重，排序，并保存到新的CSV文件中，同时去除作者名中的空格和双引号。"""
    data = pd.read_csv(input_file)
    authors = set()
    # 更新每个作者名，去除空格和双引号
    data['Authors'].str.split(';').apply(
        lambda x: authors.update(author.replace(' ', '') for author in x))
    sorted_authors = sorted(authors)
    pd.DataFrame(sorted_authors, columns=['Author']).to_csv(output_file, index=False)


def deduplicate_authors(input_path, output_path):
    """
    读取作者列表文件，去重，并将结果保存到新文件中。

    :param input_path: 输入文件的路径
    :param output_path: 输出文件的路径
    """
    # 使用集合来自动去重
    unique_authors = set()

    # 读取文件并添加到集合中，自动去除重复项
    with open(input_path, 'r', encoding='utf-8') as file:
        for line in file:
            line = line.replace(' ', '').replace(',', '，')

            unique_authors.add(line.strip())  # 使用strip()去除可能的空白字符

    # 将去重后的结果写入新文件
    with open(output_path, 'w', encoding='utf-8') as file:
        for author in sorted(unique_authors):
            file.write(author + '\n')


def update_author_names(authors_file, data_file, output_file):
    """
    更新CSV文件中的作者名，将英文名替换为对应的中文名，如果找不到对应的中文名，则删除该作者名。

    :param authors_file: 去重后的作者列表文件路径
    :param data_file: 包含作者列的CSV文件路径
    :param output_file: 输出更新后的CSV文件路径
    """
    # 读取作者列表，并创建一个映射字典
    author_map = {}
    with open(authors_file, 'r', encoding='utf-8') as file:
        for line in file:
            if '=' in line:
                english_name, chinese_name = line.strip().split('=')
                author_map[english_name.strip()] = chinese_name.strip()

    # 读取数据文件
    data = pd.read_csv(data_file)

    # 假设作者列的列名为 'Authors'
    if 'Authors' in data.columns:
        # 更新作者名
        def update_authors(authors):
            updated_authors = []
            for author in authors.split(';'):
                author = author.strip().replace(' ', '')
                if author in author_map:
                    updated_authors.append(author_map[author])
            return '; '.join(updated_authors)

        data['Authors'] = data['Authors'].apply(update_authors)
    else:
        print("No 'Authors' column found in the data file.")

    # 将更新后的数据写入新的CSV文件
    data.to_csv(output_file, index=False)


def process_quoted_data(input_file, output_file):
    """
    读取文本文件，找到双引号内的内容，替换逗号为分号，去除双引号，并保存为新的文本文件。

    :param input_file: 输入文件路径
    :param output_file: 输出文件路径
    """
    # 读取整个文件内容
    with open(input_file, 'r', encoding='utf-8') as file:
        content = file.read()

    # 使用正则表达式找到所有双引号内的内容并进行替换
    def replace_commas(match):
        # 获取匹配的文本
        text = match.group(0)
        # 替换逗号为分号
        replaced_text = text.replace(',', '，')  # 比如：Cai, C在csv是两列了，所以改为中文的逗号
        replaced_text = replaced_text.replace('"', '')  # 去掉双引号
        return replaced_text

    # 对所有双引号内的内容进行替换
    processed_content = re.sub(r'"([^"]*)"', replace_commas, content)
    # 保存处理后的内容到新文件
    with open(output_file, 'w', encoding='utf-8') as file:
        file.write(processed_content)


def main():
    # 根据标题合并文件并去重
    file_paths = glob.glob('result_sci/output/*.csv')
    merged_output = 'result_sci/result/001根据标题去重.txt'
    merge_and_deduplicate(file_paths, merged_output)

    # # 把作者都放到一列
    input_file = 'result_sci/result/001根据标题去重.txt'
    output_file = 'result_sci/result/002作者整理到一列，用分号隔开.csv'
    process_quoted_data(input_file, output_file)

    # 提取作者并排序
    input_file = 'result_sci/result/002作者整理到一列，用分号隔开.csv'
    authors_output = 'result_sci/result/003作者列表.csv'
    extract_and_sort_authors(input_file, authors_output)

    # 手动提取工程中心的作者
    # ……

    # 去重去重变中文逗号
    input_path = 'result_sci/result/004作者列表_手动整理版.txt'
    output_path = 'result_sci/result/005作者列表_手动整理版_去重变中文逗号.txt'
    deduplicate_authors(input_path, output_path)

    # 根据去重后的映射关系，更新根据标题合并文件并去重后的CSV文件中的作者名
    authors_file = 'result_sci/result/005作者列表_手动整理版_去重变中文逗号.txt'
    data_file = 'result_sci/result/002作者整理到一列，用分号隔开.csv'
    output_file = 'result_sci/result/006删除了非工程中心的老师.csv'
    update_author_names(authors_file, data_file, output_file)

    pass


if __name__ == "__main__":
    main()
